package design.singleton;

/**
 * 由于第四种实现方式同步效率太低，所以摒弃同步方法，改为同步产生实例化的的代码块。
 * 但是这种同步并不能起到线程同步的作用。
 * 跟第3种实现方式遇到的情形一致，假如一个线程进入了if (singleton == null)判断语句块，
 * 还未来得及往下执行，另一个线程也通过了这个判断语句，这时便会产生多个实例。
 */
public class Lazy5 {
    private static Lazy5 INSTANCE;

    private Lazy5(){}

    public static Lazy5 getInstance(){
        if(null == INSTANCE){
            synchronized (Lazy5.class){
                INSTANCE = new Lazy5();
            }
        }

        return INSTANCE;
    }

}
